package com.own.component.store.core.method;

import com.own.component.store.core.method.base.BaseStoreMethod;
import org.springframework.stereotype.Component;

import java.time.Duration;

/**
 * StoreAtomic
 *
 * @author chenxueli
 * @date 2023-06-28 14:19:00
 */
@Component
public interface StoreAtomic extends BaseStoreMethod {

    /**
     * 获取值
     *
     * @param key key
     * @return 值
     */
    long get(String key);

    /**
     * 获取值
     *
     * @param key      key
     * @param duration 超时时间
     * @return 值
     */
    long get(String key, Duration duration);

    /**
     * 获取值
     *
     * @param key key
     * @return 值
     */
    long getAndIncrement(String key);

    /**
     * 获取值
     *
     * @param key      key
     * @param duration 超时时间
     * @return 值
     */
    long getAndIncrement(String key, Duration duration);

    /**
     * 获取值
     *
     * @param key key
     * @return 值
     */
    long incrementAndGet(String key);

    /**
     * 获取值
     *
     * @param key      key
     * @param duration 超时时间
     * @return 值
     */
    long incrementAndGet(String key, Duration duration);

    /**
     * 设置超时时间
     *
     * @param key      key
     * @param duration 超时时间
     */
    void expire(String key, Duration duration);

    /**
     * 类型字段
     *
     * @return 类型
     */
    @Override
    default String type() {
        return "atom";
    }

}
